/**
 * Copyright (C), 2001-2023, www.bosssof.com.cn
 * FileName: UserService
 * Author: Administrator
 * Date: 2023-03-31 11:11:27
 * Description:
 * <p>
 * History:
 * <author> Administrator
 * <time> 2023-03-31 11:11:27
 * <version> 1.0.0
 * <desc> 版本描述
 */
package com.bosssoft.usercenter.service;

import com.bosssoft.usercenter.pojo.dto.IdVersion;
import com.bosssoft.usercenter.pojo.dto.UserDTO;
import com.bosssoft.usercenter.pojo.query.UserQuery;
import com.bosssoft.usercenter.pojo.vo.CommonPage;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

/**
 * @InterfaceName: UserService
 * @Description: 定义用户管理业务的接口，主要包括增加、删除、编辑、查询、批量删除等接口
 * @Author: Administrator
 * @Date: 2023-03-31 11:11
 **/
public interface UserService {
    /**
     *  界面调用接口增加用户
     *  业务异常规则  身份证号不可重复
     * @param userDTO 用户信息
     * @return true成功 false失败
     */
    Boolean add(@NotNull @Valid UserDTO userDTO);
    /**
     *  删除用户
     * @param id  记录id
     * @return  true 成功 false失败
     */
    Boolean remove(@NotNull Long id);

    /**
     *  通过id和version比较删除用户
     * @param id  记录id
     * @param version 版本
     * @return  true 成功 false失败
     */
    Boolean remove(@NotNull Long id,@NotNull Long version);

    /**
     *  批量删除用户
     * @param idVersions
     * @return true成功 false失败
     */
    @Transactional
    Boolean remove(@NotEmpty IdVersion[] idVersions);

    /**
     * 界面调用接口更新用户信息
     * @param userDTO 用户信息包含 id
     * @return true成功 false失败
     */
    Boolean update(@NotNull @Valid  UserDTO userDTO);

    /**
     * 界面调用接口更新用户信息
     * @param userQuery 用户信息包含 id
     * @return true成功 false失败
     */
    CommonPage<UserDTO> search(@NotNull @Valid @RequestBody UserQuery userQuery);

    /**
     *  页面编辑行的时候传id从后端加载数据
     * @param id  当前行id
     * @return  用户数据
     */
    UserDTO findById(@NotNull @PathVariable("id") Long id);
}
